<?php
//classe qui permet à un formulaire inclus dans un autre d'être ignoré si pas rempli
class EntiteTexteValidatorSchema extends sfValidatorSchema
{
  protected function configure($options = array(), $messages = array())
  {
    $this->addMessage('valeur', 'La valeur est requise');
    $this->addMessage('commentaire', 'Ne peut être seul');
  }

  protected function doClean($values)
  {
    $errorSchema = new sfValidatorErrorSchema($this);

    foreach($values as $key => $value)
    {
      $errorSchemaLocal = new sfValidatorErrorSchema($this);

      // commentaire rempli mais pas valeur
      if ($value['commentaire'] && !$value['valeur'])
      {
        $errorSchemaLocal->addError(new sfValidatorError($this, 'required'), 'valeur');
      }

      // formulaire vide
      if (!$value['commentaire'] && !$value['valeur'])
      {
        unset($values[$key]);
      }

      // some error for this embedded-form
      if (count($errorSchemaLocal))
      {
        $errorSchema->addError($errorSchemaLocal, (string) $key);
      }
    }

    // throws the error for the main form
    if (count($errorSchema))
    {
      throw new sfValidatorErrorSchema($this, $errorSchema);
    }

    return $values;
  }
}

?>